=begin
Classe para verificar a autenticação do usuário
=end
class AuthCheck

    def self.run?(exp,comp)
        @exp = exp
        @comp = comp
        self.InFixaPosFixa
        if self.calc == 0
          return false
        else
          return true
        end
    end
    
    def self.calc
        pilha = []
        while @exp =~ /[\|\||&&|0-9]+/
            if @exp =~ /^(\|\|)(.*)/
                @exp = $2
                x,y = pilha.pop,pilha.pop
                #puts x.to_s + '||' + y.to_s
                if (x == 1) or (y == 1)
                    pilha.push(1)
                else
                    pilha.push(0)
                end
            elsif @exp =~ /^(&&)(.*)/
                @exp = $2
                x,y = pilha.pop,pilha.pop
                #puts x.to_s + '&&' + y.to_s
                if (x == 1) and (y == 1)
                    pilha.push(1)
                else
                    pilha.push(0)
                end
            elsif @exp =~ /^([0-9])(.*)/
                @exp = $2
                pilha.push($1.to_i)
            end
        end
        pilha.pop.to_i
    end
    
    def self.InFixaPosFixa
        pilha = []
        result = ''
        while @exp =~ /[\(|\)|\|\||&&|a-zA-Z0-9:]+/
            if @exp =~ /^(\()(.*)/
                @exp = $2
                pilha.push($1)
            elsif @exp =~ /^(\))(.*)/
                @exp = $2
                item = pilha.pop.to_s
                while item != '('
                    result += item
                    item = pilha.pop.to_s
                end
            elsif @exp =~ /^(\|\|)(.*)/
                @exp = $2
                while pilha.length > 0 && pilha[pilha.length-1].to_s != '('
                    result += pilha.pop.to_s
                end
                pilha.push($1)
            elsif @exp =~ /^(&&)(.*)/
                @exp = $2
                while pilha.length > 0 && pilha[pilha.length-1].to_s != '('
                    result += pilha.pop.to_s
                end
                pilha.push($1)
            elsif @exp =~ /^([a-zA-Z:]+)(.*)/
                @exp = $2
                if @comp.include?($1)
                    result += '1'
                else
                    result += '0'
                end                
            end
        end
        while pilha.length > 0
            result += pilha.pop.to_s
        end
        @exp = result
    end

end